package com.xbongbong.saas.model;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.saas.domain.entity.ProductStockInfoEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface ProductStockInfoModel {
    /**
     * 入库单产品数据插入
     * @param productStockInfo 供应商实体
     * @author Jian.Wang
     * @date 2019/1/23 20:27
     * @since v1.0
     * @throws XbbException 异常
     * @return Integer
     */
    Integer insert(ProductStockInfoEntity productStockInfo) throws XbbException;
    /**
     * 入库单产品数据更新
     * @param productStockInfo 供应商实体
     * @author Jian.Wang
     * @date 2019/1/23 20:27
     * @since v1.0
     * @throws XbbException 异常
     * @return Integer
     */
    Integer update(ProductStockInfoEntity productStockInfo) throws XbbException;

    /**
     * 根据索引查询数据
     *
     * @param param 查询参数
     * @author Jian.Wang
     * @date 2019/2/21 16:51
     * @since v1.0
     * @return List<ProductEntityExt>
     **/
    List<ProductStockInfoEntity> findEntitys(Map<String, Object> param);

    List<ProductStockInfoEntity> getByRefId(Long instockProductId, String corpid, Integer code);

    Integer save(ProductStockInfoEntity productStockInfo);

    /**
     * 根据关联id和关联类型查询数据
     *
     * @param refId 关联id
     * @param refType 关联类型
     * @param corpid 公司ID
     * @author lcx
     * @date 2019/2/21 16:51
     * @since v1.0
     **/
    List<ProductStockInfoEntity> getByRefIdAndRefType (@Param("refId") Long refId, @Param("refType") Integer refType, @Param("corpid") String corpid);
    /**
     * 根据关联idIn和关联类型查询数据
     *
     * @param refIdIn 关联id集合
     * @param refType 关联类型
     * @param corpid 公司ID
     * @author lcx
     * @date 2019/2/21 16:51
     * @since v1.0
     **/
    List<ProductStockInfoEntity> getByRefIdInAndRefType (@Param("refIdIn") List<Long> refIdIn, @Param("refType") Integer refType, @Param("corpid") String corpid);

    /**
     * 通过关联id批量删除
     * @param corpid 公司id
     * @param refIdIn 关联id
     * @param refType 关联类型
     * @return
     */
    Integer deleteByRefIdIn(String corpid, List<Long> refIdIn, Integer refType);

    /**
     * 获取保质期预警的产品id
     *
     * @param param 参数集合
     * @author lcx
     * @date 2019/2/21 16:51
     * @since v1.0
     * @return 保质期预警的产品id
     **/
    List<Long> findGuaranteePeriodProductIds(Map<String, Object> param);

    /**
     * 根据id删除
     * @param idIn
     * @param corpid
     */
    Integer deleteByIdIn(List<Long> idIn, String corpid);
}
